#include <bits/stdc++.h>
using namespace std;

using i64 = long long;

void solve(){
    array<int, 6> a; // 定义一个数组a，用于存储输入的6个整数值
    for(int i = 1 ; i <= 5 ; i ++){
        cin >> a[i]; // 从输入读取5个值到数组a中
    }
    int ans = 0 ; // 定义变量ans用于存储答案
    int t = min(a[1],a[5]); // 计算a[1]和a[5]中的最小值，并赋值给t
    a[1] -= t; // 从a[1]中减去t
    a[5] -= t; // 从a[5]中减去t
    ans += t; // 将t加到ans上

    // 以下与上面的步骤类似，针对不同的数组元素进行操作
    t = min(a[2],a[4]);
    a[2] -= t;
    a[4] -= t;
    ans += t;

    t = a[3] / 2; // 将a[3]除以2的结果赋值给t
    a[3] -= 2 * t; // 从a[3]中减去2倍的t
    ans += t; // 将t加到ans上

    // 根据a数组的剩余值进行不同的计算
    if( a[5] == 0) {
        if(a[4] == 0){
            // 只有1, 2, 3三种数字剩下
            ans += (1LL* a[1] + 2LL * a[2] + 3LL * a[3] ) / 6;
        }else if(a[1] >= 3LL * a[3] + 2LL * a[4]){
            // 1 3:1 4
            // 用 1 凑 4 或 3
            ans += (1LL * a[1] + 3LL * a[3] + 4LL * a[4]) / 6 ;
        }else {
            // 1:n 3:1 4:n
            ans += min((a[1] + a[3] + a[4] ) /3,a[4]);
        }
    }else{
        // 只有2, 3, 5三种数字剩下
        if(a[3] == 1){
            // 有3的情况
            a[3] --;
            a[5] --;
            ans ++;
        }
        if (a[4] == 0){
            // 2 5
            if(a[2] >= a[5]){
                // 2比5多
                ans += a[5] + (a[2] - a[5]) / 3;
            }else{
                // 2比5少
                ans += (a[2] + a[5]) /2 ;
            }
        }else{

            if(a[4] >= a[5]){
                // 4比5多,用4配5
                ans += a[5] + (a[4] - a[5]) / 3;
            }else{
                // 用4或5配5
                ans += (a[4] + a[5]) /2 ;
            }
        }
    }
    cout << ans << "\n"; // 输出最终的答案
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;
    while( t -- ){
        solve();
    }
}
